home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / FUNCSTRI.I < prev    next >
Encoding:
Modula Implementation  |  1990-11-26  |  9.6 KB  |  329 lines

  1. IMPLEMENTATION MODULE FuncStrings;
  2. (*$Y+,N+,L-*)
  3.  
  4. (*
  5.   18.06.88  TT : Ersterstellung
  6.   29.06.88  TT : Namensänderungen
  7.   13.08.88  TT : UpStr/LowStr über Tabelle
  8. *)
  9.  
  10. FROM SYSTEM IMPORT ASSEMBLER;
  11. IMPORT Strings;
  12.  
  13. VAR valid: BOOLEAN;
  14.  
  15.  
  16. PROCEDURE BlankDel ( REF source: ARRAY OF CHAR ): String;
  17.   BEGIN
  18.     ASSEMBLER
  19.         MOVE    -(A3),D0
  20.         MOVE.L  -(A3),A0
  21.         MOVE.L  A3,A1
  22.         ADDA.W  #80,A3
  23.         MOVEQ   #79,D2
  24.       L SUBQ    #1,D0
  25.         BCS     E
  26.         MOVE.B  (A0)+,D1
  27.         BEQ     E
  28.         CMPI.B  #9,D1           ; TAB
  29.         BEQ     L
  30.         CMPI.B  #' ',D1
  31.         BEQ     L
  32.         MOVE.B  D1,(A1)+
  33.         SUBQ.W  #1,D2
  34.         BCC     L
  35.       E CLR.B   (A1)
  36.     END
  37.   END BlankDel;
  38.  
  39. PROCEDURE LeadBlankDel ( REF source: ARRAY OF CHAR ): String;
  40.   BEGIN
  41.     ASSEMBLER
  42.         MOVE.L  D3,-(A7)
  43.         MOVE    -(A3),D0
  44.         ADDQ    #1,D0
  45.         MOVE.L  -(A3),A0
  46.         MOVE.L  A3,A1
  47.         ADDA.W  #80,A3
  48.         MOVEQ   #79,D2
  49.         MOVEQ   #1,D3
  50.  
  51.         SUBQ    #1,D0
  52.         BCS     E
  53.         MOVE.B  (A0)+,D1
  54.         BEQ     E
  55.         CMPI.B  #9,D1           ; TAB
  56.         BEQ     L
  57.         CMPI.B  #' ',D1
  58.         BEQ     L
  59.         MOVEQ   #0,D3
  60.  
  61.       L SUBQ    #1,D0
  62.         BCS     E
  63.         MOVE.B  (A0)+,D1
  64.         BEQ     E
  65.         TST     D3
  66.         BEQ     N
  67.         CMPI.B  #9,D1           ; TAB
  68.         BEQ     L
  69.         CMPI.B  #' ',D1
  70.         BEQ     L
  71.         MOVEQ   #0,D3
  72.       N MOVE.B  D1,(A1)+
  73.         SUBQ.W  #1,D2
  74.         BCC     L
  75.       E CLR.B   (A1)
  76.         MOVE.L  (A7)+,D3
  77.     END
  78.   END LeadBlankDel;
  79.  
  80. PROCEDURE TrailBlankDel ( REF source: ARRAY OF CHAR ): String;
  81.   BEGIN
  82.     ASSEMBLER
  83.         MOVE    -(A3),D0
  84.         ADDQ    #1,D0
  85.         MOVE.L  -(A3),A0
  86.         MOVE.L  A3,A1
  87.         MOVE.L  A1,A2
  88.         ADDA.W  #80,A3
  89.         MOVEQ   #79,D2
  90.         
  91.       L SUBQ    #1,D0
  92.         BCS     E
  93.         MOVE.B  (A0)+,D1
  94.         BEQ     E
  95.         CMPI.B  #9,D1           ; TAB
  96.         BEQ     L
  97.         CMPI.B  #' ',D1
  98.         BEQ     L
  99.         MOVE.B  D1,(A1)+
  100.         MOVE.L  A1,A2
  101.         SUBQ.W  #1,D2
  102.         BCC     L
  103.       E CLR.B   (A2)
  104.     END
  105.   END TrailBlankDel;
  106.  
  107.  
  108. PROCEDURE Str ( REF source : ARRAY OF CHAR): String;
  109.   BEGIN
  110.     ASSEMBLER
  111.         MOVE.W  -(A3),D0
  112.         MOVE.L  -(A3),A0
  113.         MOVE.L  A3,A1
  114.         ADDA.W  #80,A3
  115.         MOVEQ   #79,D1
  116.         CMP.W   D0,D1           ; kleineren der beiden High-Werte
  117.         BLS     L
  118.         MOVE    D0,D1
  119.       L MOVE.B  (A0)+,(A1)+
  120.         DBEQ    D1,L
  121.         CLR.B   (A1)+
  122.       E
  123.     END
  124.   END Str;
  125.  
  126. PROCEDURE ConcStr ( REF first, second: ARRAY OF CHAR ): String;
  127.   BEGIN
  128.     ASSEMBLER
  129.         LEA     -12(A3),A0
  130.         MOVE.L  A0,(A3)+
  131.         MOVE.W  #79,(A3)+
  132.         MOVE.L  #valid,(A3)+
  133.         JSR     Strings.Concat
  134.         ADDA.W  #80,A3
  135.     END
  136.   END ConcStr;
  137.  
  138. PROCEDURE CopyStr ( REF source : ARRAY OF CHAR;
  139.                     pos    : INTEGER;
  140.                     len    : INTEGER ): String;
  141.   BEGIN
  142.     ASSEMBLER
  143.         LEA     -10(A3),A0
  144.         MOVE.L  A0,(A3)+
  145.         MOVE.W  #79,(A3)+
  146.         MOVE.L  #valid,(A3)+
  147.         JSR     Strings.Copy
  148.         ADDA.W  #80,A3
  149.     END
  150.   END CopyStr;
  151.  
  152. PROCEDURE UpStr ( REF source: ARRAY OF CHAR ): String;
  153.   BEGIN
  154.     ASSEMBLER
  155.         MOVE    -(A3),D1
  156.         MOVE.L  -(A3),A0
  157.         MOVE.L  A3,A1
  158.         ADDA.W  #80,A3
  159.         MOVEQ   #79,D2
  160.         LEA     tab(PC),A2
  161.         CLR     D0
  162. l       MOVE.B  (A0)+,D0
  163.         BEQ     e
  164.         MOVE.B  0(A2,D0.W),(A1)+
  165.         SUBQ.W  #1,D1
  166.         DBCS    D2,l
  167. e       CLR.B   (A1)+
  168.         RTS
  169.  
  170. tab:    DC.B $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  171.         DC.B $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F
  172.         DC.B ' ','!','"','#','$','%','&',$27,'(',')','*','+',',','-','.','/'
  173.         DC.B '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?'
  174.         DC.B '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'
  175.         DC.B 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_'
  176.         DC.B '`','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'
  177.         DC.B 'P','Q','R','S','T','U','V','W','X','Y','Z','{','|','}','~',''
  178.         DC.B 'Ç','Ü','É','A','Ä','À','Å','Ç','E','E','E','I','I','I','Ä','Å'
  179.         DC.B 'É','Æ','Æ','O','Ö','O','U','U','ÿ','Ö','Ü','¢','£','¥','ß','ƒ'
  180.         DC.B 'A','I','O','U','Ñ','Ñ','ª','º','¿','⌐','¬','½','¼','¡','«','»'
  181.         DC.B 'Ã','Õ','Ø','Ø','Œ','Œ','À','Ã','Õ','¨','´','†','¶','©','®','™'
  182.         DC.B 'IJ','IJ','א','ב','ג','ד','ה','ו','ז','ח','ט','י','כ','ל','מ','נ'
  183.         DC.B 'ס','ע','פ','צ','ק','ר','ש','ת','ן','ך','ם','ף','ץ','§','∧','∞'
  184.         DC.B 'α','β','Γ','π','Σ','σ','µ','τ','Φ','Θ','Ω','δ','∮','ϕ','∈','∩'
  185.         DC.B '≡','±','≥','≤','⌠','⌡','÷','≈','°','∙','·','√','ⁿ','²','³','¯'
  186.     END
  187.   END UpStr;
  188.  
  189. PROCEDURE LowStr ( REF source: ARRAY OF CHAR ): String;
  190.   BEGIN
  191.     ASSEMBLER
  192.         MOVE    -(A3),D1
  193.         MOVE.L  -(A3),A0
  194.         MOVE.L  A3,A1
  195.         ADDA.W  #80,A3
  196.         MOVEQ   #79,D2
  197.         LEA     tab(PC),A2
  198.         CLR     D0
  199. l       MOVE.B  (A0)+,D0
  200.         BEQ     e
  201.         MOVE.B  0(A2,D0.W),(A1)+
  202.         SUBQ.W  #1,D1
  203.         DBCS    D2,l
  204. e       CLR.B   (A1)+
  205.         RTS
  206.  
  207. tab     DC.B $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  208.         DC.B $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F
  209.         DC.B ' ','!','"','#','$','%','&',$27,'(',')','*','+',',','-','.','/'
  210.         DC.B '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?'
  211.         DC.B '@','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'
  212.         DC.B 'p','q','r','s','t','u','v','w','x','y','z','[','\',']','^','_'
  213.         DC.B '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'
  214.         DC.B 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~',''
  215.         DC.B 'ç','ü','é','â','ä','à','å','ç','ê','ë','è','ï','î','ì','ä','å'
  216.         DC.B 'é','æ','æ','ô','ö','ò','û','ù','ÿ','ö','ü','¢','£','¥','ß','ƒ'
  217.         DC.B 'á','í','ó','ú','ñ','ñ','ª','º','¿','⌐','¬','½','¼','¡','«','»'
  218.         DC.B 'ã','õ','ø','ø','œ','œ','à','ã','õ','¨','´','†','¶','©','®','™'
  219.         DC.B 'ij','ij','א','ב','ג','ד','ה','ו','ז','ח','ט','י','כ','ל','מ','נ'
  220.         DC.B 'ס','ע','פ','צ','ק','ר','ש','ת','ן','ך','ם','ף','ץ','§','∧','∞'
  221.         DC.B 'α','β','Γ','π','Σ','σ','µ','τ','Φ','Θ','Ω','δ','∮','ϕ','∈','∩'
  222.         DC.B '≡','±','≥','≤','⌠','⌡','÷','≈','°','∙','·','√','ⁿ','²','³','¯'
  223.     END
  224.   END LowStr;
  225.  
  226. PROCEDURE EatSpc ( REF source: ARRAY OF CHAR ): String;
  227.   BEGIN
  228.     ASSEMBLER
  229.         MOVE    -(A3),D0
  230.         MOVE.L  -(A3),A0
  231.         MOVE.L  A3,A1
  232.         ADDA.W  #80,A3
  233.         MOVEQ   #79,D2
  234.       L MOVE.B  (A0)+,D1
  235.         BEQ     E
  236.         CMPI.B  #' ',D1
  237.         BEQ     C
  238.         MOVE.B  D1,(A1)+
  239.         SUBQ.W  #1,D2
  240.         BCS     E
  241.       C DBRA    D0,L
  242.       E CLR.B   (A1)
  243.     END
  244.   END EatSpc;
  245.  
  246.  
  247. PROCEDURE DelStr ( REF source : ARRAY OF CHAR;
  248.                    pos    : INTEGER;
  249.                    len    : INTEGER ): String;
  250.   BEGIN
  251.     ASSEMBLER
  252.         MOVE.L  D4,-(A7)
  253.         MOVE.W  -(A3),D0        ; len
  254.         MOVE.W  -(A3),D1        ; pos
  255.         MOVE.W  -(A3),D2        ; high
  256.         MOVE.L  -(A3),A0        ; source
  257.         MOVE.L  A3,A1
  258.         ADDA.W  #80,A3
  259.         MOVEQ   #79,D4
  260.         TST.W   D1
  261.         BPL     C
  262.         ADD.W   D1,D0
  263.         CLR     D1
  264.       C ; D1: start, D0: anzahl
  265.         BRA     D
  266.       L MOVE.B  (A0)+,(A1)+     ; source kopieren
  267.         BEQ     E
  268.         SUBQ.W  #1,D4
  269.         BCS     E
  270.         SUBQ.W  #1,D2
  271.         BCS     E
  272.       D DBRA    D1,L            ; pos
  273.         ; jetzt 'len' Zeichen überspringen
  274.       M SUBQ.W  #1,D0
  275.         TST.W   D0
  276.         BMI     L               ; wieder source kopieren
  277.         TST.B   (A0)+
  278.         BEQ     E
  279.         SUBQ.W  #1,D2
  280.         BCS     E
  281.         BRA     M
  282.       E CLR.B   (A1)
  283.         MOVE.L  (A7)+,D4
  284.     END
  285.   END DelStr;
  286.  
  287. PROCEDURE InsStr ( REF this : ARRAY OF CHAR;
  288.                    at   : INTEGER;
  289.                    REF into : ARRAY OF CHAR ): String;
  290.   BEGIN
  291.     ASSEMBLER
  292.         MOVE.W  -(A3),D0        ; high (into)
  293.         MOVE.L  -(A3),A0        ; into
  294.         MOVE.W  -(A3),D2        ; at
  295.         MOVE.W  -(A3),D1        ; high (this)
  296.         MOVE.L  -(A3),A1        ; this
  297.         MOVE.L  A3,A2
  298.         ADDA.W  #80,A3
  299.         MOVEQ   #79,D4
  300.       O ADDQ.W  #1,D0
  301.         TST.W   D2
  302.         BPL     P
  303.         ADDQ    #1,D2
  304.         TST.B   (A1)+
  305.         DBEQ    D1,O
  306.         MOVEQ   #-1,D2
  307.       L SUBQ.W  #1,D0
  308.         BCS     E
  309.         MOVE.B  (A0)+,(A2)+     ; Bereich vor 'at' kopieren
  310.         BEQ     E
  311.         SUBQ    #1,D4
  312.         BCS     E
  313.       P DBRA    D2,L
  314.       C MOVE.B  (A1)+,(A2)+     ; 'this' kopieren
  315.         BEQ     R
  316.         SUBQ    #1,D4
  317.         DBCS    D1,C
  318.         BCC     L
  319.         BRA     E
  320.       R SUBQ.L  #1,A2
  321.         BRA     L
  322.       E CLR.B   (A2)
  323.     END
  324.   END InsStr;
  325.  
  326. END FuncStrings.
  327. ə
  328. (* $FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$0000064A$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFF6BD6A$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191$FFFBF191Ç$00001A0CT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$000004D1$000000CE$00000029$000008EB$FFEE2C3C$FFEE2C3C$0000002C$FFEA6820$FFEA6820$00001A0C$00001BEA$00002012$00002064$000004D2$000005D9$000004EB¿ÇÇ*)
  329.